
/**
 * Created with IntelliJ IDEA
 * Description
 * User:user
 * Date:2021-10-20
 * Time:15:07
 */

//代码块的出现，是为了再合适的时候处理有些数据
//本地代码块：在方法内部定义的代码块
//实例代码块：
//静态代码块：只执行一次，不需要创建对象就可以执行生成，用于提前加载
//同步代码块
    //如果都是静态的和你定义的顺序有关系,如果都是实例的也是跟你先后有关
    //如果都是实例的
    //先执行静态代码块
    //再执行实例代码块
    //再执行构造方法
    //与这三者的放置位置没有关系的
class  Cat{
    private String name;
    //private int age;


    {
        //方法的外边,类的里边
        this.age = 999;

        System.out.println("实例代码块");

    }
    private int age = 23;
    //实例化代码块也是跟先后顺序有关
    static{
        //静态代码块
        //this.name = "hello";
        //为了初始化一些静态的数据成员
        count = 1111;
        System.out.println("静态代码块");
    }
    public static int count = 123;//静态的时候与他放置的先后顺序有关系，谁在后面打印谁的值
    public String getName() {
        return name;
    }
    public Cat(){
        System.out.println("不带参数的构造方法");
    }
    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("带2个参数的构造方法");
    }

    public void setName(String name) {
        this.name = name;

    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
        {
            //本地代码快，基本没人用
        }
    }
    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class TestDemo3 {
    public static void main(String[] args) {
        Cat cat = new Cat();
        System.out.println("                ");
        Cat cat2 = new Cat();
        System.out.println(Cat.count);
        System.out.println(cat2.getAge());
        System.out.println(new Cat().getAge());//匿名对象，每次使用一次创建一个对象
        System.out.println(new Cat().getName());//匿名对象，每使用一次创建一个对象
    }
}

//匿名对象
//没有名字的对象
